
package tp2;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/******************************************************************************
 *******************************Options******************************************
 ******************************************************************************/
/**
 *Cette classe crée le panneau pour les options du jeu ( Nombre de joueur, nom des joueur
 */
public class Options extends JPanel {

    Fenetre fenetre;
    JLabel lblTitre;
    JLabel lblNomJoueur1;
    JLabel lblNomJoueur2;
    JLabel lblNomJoueur3;
    JLabel lblNomJoueur4;
    JTextField txtNomJoueur1;
    JTextField txtNomJoueur2;
    JTextField txtNomJoueur3;
    JTextField txtNomJoueur4;
    JPanel pnlNbJoueur;
    JPanel pnlSecondaire1;
    JPanel pnlSecondaire2;
    JPanel pnlSecondaire3;
    JPanel pnlSecondaire4;
    JButton btnRetour;
    JButton btnValider;
    private JComboBox combo;
    private static int nbJoueurs = 2;
    private static String nomJoueur1 = "Joueur 1";
    private static String nomJoueur2 = "Joueur 2";
    private static String nomJoueur3 = "Joueur 3";
    private static String nomJoueur4 = "Joueur 4";
/**
 * constructeur du panneau fenetre
 * @param fenetre reference a la fenetre
 */
    public Options(Fenetre fenetre) {

        this.setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
        this.fenetre = fenetre;
        this.initComposants();

        this.add(lblTitre);
        this.buildPanel();
        this.add(btnRetour);
    }
/**
 * Initialise les composants de la fenetre options
 */
    private void initComposants() {
        lblTitre = new JLabel("Options");


        lblNomJoueur1 = new JLabel("Écrire le nom du joueur 1");
        lblNomJoueur2 = new JLabel("Écrire le nom du joueur 2");
        lblNomJoueur3 = new JLabel("Écrire le nom du joueur 3");
        lblNomJoueur4 = new JLabel("Écrire le nom du joueur 4");
        txtNomJoueur1 = new JTextField("1", 10);
        txtNomJoueur2 = new JTextField("2", 10);
        txtNomJoueur3 = new JTextField("", 10);
        txtNomJoueur4 = new JTextField("", 10);

        txtNomJoueur3.setEnabled(false);
        txtNomJoueur4.setEnabled(false);

        btnRetour = new JButton("Retour");
        btnValider = new JButton("Valider");
        btnRetour.addActionListener(new GererEvenement());
        btnValider.addActionListener(new GererEvenement());
        txtNomJoueur1.addKeyListener(new GererEvenement());
        txtNomJoueur2.addKeyListener(new GererEvenement());
        txtNomJoueur3.addKeyListener(new GererEvenement());
        txtNomJoueur4.addKeyListener(new GererEvenement());
        combo = new JComboBox();
        combo.addItem("2");
        combo.addItem("3");
        combo.addItem("4");

        combo.addItemListener(new GererEvenement());

    }
/**
 * Construit les panneaus pour l'esthetique
 */
    private void buildPanel() {
        pnlNbJoueur = new JPanel();
        pnlSecondaire1 = new JPanel();
        pnlSecondaire2 = new JPanel();
        pnlSecondaire3 = new JPanel();
        pnlSecondaire4 = new JPanel();

        pnlNbJoueur.add(new JLabel("Nombre de joueur"));
        pnlNbJoueur.add(combo);

        pnlSecondaire1.add(lblNomJoueur1);
        pnlSecondaire1.add(txtNomJoueur1);
        pnlSecondaire2.add(lblNomJoueur2);
        pnlSecondaire2.add(txtNomJoueur2);
        pnlSecondaire3.add(lblNomJoueur3);
        pnlSecondaire3.add(txtNomJoueur3);
        pnlSecondaire4.add(lblNomJoueur4);
        pnlSecondaire4.add(txtNomJoueur4);

        this.add(pnlNbJoueur);
        this.add(pnlSecondaire1);
        this.add(pnlSecondaire2);
        this.add(pnlSecondaire3);
        this.add(pnlSecondaire4);
        this.add(btnValider);


    }
/**
 * Permet d'aller chercher le nombre de joueur
 * @return le nombre de joueur
 */
    public static int getNbJoueurs() {
        return nbJoueurs;
    }
/**
 * Permet de retourner les nom des joueurs inscrits selon le numero
 * @param no numero du joueur
 * @return le nom du joueur
 */
    public static String getNomJoueur(int no) {
        switch (no) {
            case 1:
                return getNomJoueur1();
            case 2:
                return getNomJoueur2();
            case 3:
                return getNomJoueur3();
            case 4:
                return getNomJoueur4();
        }
        return "le nom des joueur";
    }
/**
 * Retourne le nom du joueur
 * @return le nom du joueur
 */
    public static String getNomJoueur1() {
        return nomJoueur1;
    }
/**
 * Retourne le nom du joueur
 * @return le nom du joueur
 */
    public static String getNomJoueur2() {
        return nomJoueur2;
    }
/**
 * Retourne le nom du joueur
 * @return le nom du joueur
 */
    public static String getNomJoueur3() {
        return nomJoueur3;
    }
/**
 * Retourne le nom du joueur
 * @return le nom du joueur
 */
    public static String getNomJoueur4() {
        return nomJoueur4;
    }
/**
 * retourne le nombre de joueur choisi
 * @return le nombre de joueur choisi
 * @throws Exception
 */
    public int getCombo() throws Exception {
        return Integer.parseInt((String) combo.getSelectedItem());
    }
/**
 * Classe qui permet de gerer les evenements de la classe menuprincipal
 */
    class GererEvenement extends KeyAdapter implements ActionListener, ItemListener {
/**
 * gere les boutons du panneau
 * @param ae
 */
        public void actionPerformed(ActionEvent ae) {
            if (ae.getSource() == btnRetour) {
                fenetre.initPnlMenu();
            } else if (ae.getSource() == btnValider) {
//va chercher le texte des JTextField
                Options.nomJoueur1 = txtNomJoueur1.getText();
                Options.nomJoueur2 = txtNomJoueur2.getText();
                Options.nomJoueur3 = txtNomJoueur3.getText();
                Options.nomJoueur4 = txtNomJoueur4.getText();
                btnValider.setEnabled(false);
            }

        }
/**
 * Permet d'activer le bouton valider s'il y a quelconque changement
 * @param e
 */
        @Override
        public void keyTyped(KeyEvent e) {
            btnValider.setEnabled(true);

        }
/**
 * Permet de gerer les evenement que le combobox provoque sur l'activation/desactivation des jtextfield
 * @param e
 */
        public void itemStateChanged(ItemEvent e) {
            try {
                Options.nbJoueurs = getCombo();
                btnValider.setEnabled(true);
                if (Options.nbJoueurs == 3) {
                    txtNomJoueur3.setEnabled(true);
                    txtNomJoueur4.setEnabled(false);
                    txtNomJoueur3.setText("3");
                    txtNomJoueur4.setText("");

                } else if (Options.nbJoueurs == 4) {
                    txtNomJoueur3.setEnabled(true);
                    txtNomJoueur4.setEnabled(true);
                    txtNomJoueur3.setText("3");
                    txtNomJoueur4.setText("4");
                } else {
                    txtNomJoueur3.setEnabled(false);
                    txtNomJoueur4.setEnabled(false);
                    txtNomJoueur3.setText("");
                    txtNomJoueur4.setText("");
                }

            } catch (Exception ex) {
                System.out.println(ex);
            }
        }
    }
}
